package mc747.servicos.estoque;

import java.util.List;
import java.util.Vector;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

public class Estoque {
	
	static final int base = 5;

	private String getDados (String params){
		return getDados(params, null);
	}
	
	private String getDados (String params, HttpMethodParams hmp){
		HttpClient client = new HttpClient();
		String[] response;
		
		GetMethod method = new GetMethod(params);
      
		try {
			if (hmp != null){
				method.setParams(hmp);
			}
			System.err.println("Method: " + method.getURI());
		} catch (URIException e1) {
			e1.printStackTrace();
		}
      
		String s = null;
		
		try{
			client.executeMethod(method);
			s = method.getResponseBodyAsString();
		}catch(Exception e) { 
			System.err.println(e); 
		}
		method.releaseConnection();
		return s;	
	}
	
	public java.util.List<Produto> getProdutos(){
		String resultado = this.getDados("http://rachacuca.org:8000/stock/list/5/");
		System.out.println(resultado);
		return this.toLista(resultado);
	}
	
	public java.util.List<Produto> getProdutos(String categoria) {
		HttpMethodParams hmp = new HttpMethodParams();
		hmp.setParameter("terms", categoria);
		String resultado = this.getDados("http://rachacuca.org:8000/stock/search/5/", hmp);
		System.out.println(resultado);
		return this.toLista(resultado);
	}
	
	private List<Produto> toLista(String resultado) {
		String ids = resultado.substring(resultado.lastIndexOf('[')+1, resultado.lastIndexOf(']'));
		System.out.println(ids);
		
		List<Produto> lista = new Vector<Produto>();
		
		for (int ini=-2; ini!=-1;){
			System.out.println(ini);
			int prox = ids.indexOf(',', ini+1);
			System.out.println(prox);
			if (prox != -1){
				lista.add(this.getProduto(Integer.parseInt(ids.substring(ini+2, prox))));
			} else {
				lista.add(this.getProduto(Integer.parseInt(ids.substring(ini+2, ids.length()))));
			}
			ini = prox;
		}
		
		return lista;
	}

	public Produto getProduto (int id){
		String resultado = this.getDados("http://rachacuca.org:8000/stock/info/5/" + id);
		System.out.println(resultado);
		String[] retorno = resultado.split("\"");
		
		Produto p = new Produto();
		p.setId(id);
		p.setPrice(Float.parseFloat(retorno[3]));
		System.out.println(p.getPrice());
		p.setTitle(retorno[7]);
		System.out.println(p.getTitle());
		p.setDescription(retorno[11]);
		System.out.println(p.getDescription());
		p.setWeight(Float.parseFloat(retorno[15]));
		System.out.println(p.getWeight());
		p.setTechnicalDescription(retorno[19]);
		System.out.println(p.getTechnicalDescription());
		
		return p;
	}
	
	public void removeProduto (int id, int quantia){
		this.getDados("http://rachacuca.org:8000/stock/remove/5/" + id + "/" + quantia);
	}
	
	public static void main(String[] args) {
		Estoque estoque = new Estoque();
		estoque.getProduto(51);
		System.out.println("Testando get produtos ---------------------");
		estoque.getProdutos(); 
		estoque.removeProduto(51, 1);
		System.out.println("Terminou");
	}
}
